﻿using System;
//catch子句
//catch子句定义捕获哪些类型的异常。这些异常应该是System.Exception或System.Exception的子类。
//捕获System.Exception表示捕获所有可能的异常。用于以下情况：
//    不管哪种特定类型的异常，程序都可以修复
//    希望重新抛出该异常（可以在记入日志后）
//    程序终止前的最后一个错误处理
//更常见的做法是，为了避免处理程序没有被定义的情况，只捕获特定类型的异常（例如OutOfMemoryException异常）。


namespace _103_try语句和异常_catch子句
{
    //可以在多个catch子句中处理各种异常类型（下例也可以通过显式属性检查实现）：
    class Test
    {
        static void Main(string[] args)
        {
            try
            {
                byte b = byte.Parse(args[0]);
                Console.WriteLine(b);
            }
            catch (IndexOutOfRangeException ex)
            {
                Console.WriteLine("Please provid at least one argument");
            }
            catch (FormatException ex)
            {
                Console.WriteLine("That's Not a number!");
            }
            catch (OverflowException ex)
            {
                Console.WriteLine("You've given me more than a byte");
            }

            //对于每一种给定的异常，只有一个catch子句进行。如果想要建立捕获更普遍的异常（如System.Exception）的安全网，必须把处理特定异常的语句放在前面。
            //如果不需要使用变量值，不指定变量也可以捕获异常：
            /*
            catch(StackOverflowException) // 没有变量
            {
            }
            */
            //甚至，变量和类型可以都省略，表示指捕获所有异常：
            //catch { ... }

            //提示：除C#外的其他语言中，可以抛出不是派生自Exception类的对象（但不推荐）。CLR自动把此对象封装在RuntimeWrappedException类中（该类派生自Exception）。
        }
    }
}